iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Web 3

以 Python 進入以太坊虛擬機 (EVM) 的幻想境界系列 第 10

虛擬境界 10:記憶體指令

  • 分享至 

  • xImage
  •  

第十章:存取記憶體相關指令

在這一章中,我們將介紹 EVM 中與存取記憶體相關的指令,包括 MLOAD、MSTORE 和 MSTORE8。

MLOAD = 0x51
MSTORE = 0x52
MSTORE8 = 0x53

存取記憶體相關指令概述

這些指令用於存取合約的記憶體,允許合約讀取和寫入記憶體中的資料。

  • MLOAD 指令:從記憶體中讀取指定位置的 32 位資料,並將其推送到堆疊。
def mload(self):
    location = self.evm.stack.pop()
    data = read_from_memory(location, 32)  # 讀取 32 位資料
    value = int.from_bytes(data, byteorder='big')
    self.evm.stack.append(value)

  • MSTORE 指令:將堆疊頂部的資料寫入指定位置的記憶體中。
def mstore(self):
    location = self.evm.stack.pop()
    value = self.evm.stack.pop()
    data = value.to_bytes(32, byteorder='big')
    write_to_memory(location, data)  # 將資料寫入記憶體

  • MSTORE8 指令:將堆疊頂部的低位 8 位資料寫入指定位置的記憶體中。
def mstore8(self):
    location = self.evm.stack.pop()
    value = self.evm.stack.pop() & 0xFF  # 只保留低位 8 位
    data = value.to_bytes(1, byteorder='big')
    write_to_memory(location, data)  # 將資料寫入記憶體

這些指令允許合約在執行過程中存取記憶體,進而讀取或寫入資料。

請注意,這些指令的實現需要訪問合約的記憶體,你需要根據具體情況自行實現相應的記憶體讀取和寫入邏輯。

這將把從指定位置讀取的 32 位資料推送到堆疊。

在這一章中,我們介紹了 EVM 中與存取記憶體相關的指令,包括 MLOAD、MSTORE 和 MSTORE8。這些指令允許合約讀取和寫入記憶體中的資料。


上一篇
虛擬境界 9:環境和區塊資訊指令
下一篇
虛擬境界 11:儲存空間指令
系列文
以 Python 進入以太坊虛擬機 (EVM) 的幻想境界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言